// Simple demonstration of Template Method.
package v.book.read.tip.templatemethod;

import junit.framework.TestCase;

abstract class ApplicationFramework {
	
	public ApplicationFramework() {
		templateMethod(); // Dangerous!
	}

	abstract void customize1();

	abstract void customize2();

	final void templateMethod() {
		for (int i = 0; i < 5; i++) {
			customize1();
			customize2();
		}
	}
}

// Create a new "application":
class MyApp extends ApplicationFramework {
	void customize1() {
		System.out.print("Hello ");
	}

	void customize2() {
		System.out.println("World!");
	}
}

public class TemplateMethod extends TestCase {
	MyApp app = new MyApp();

	public void test() {
		// The MyApp constructor does all the work.
		// This just makes sure it will complete
		// without throwing an exception.
	}

	public static void main(String args[]) {
		junit.textui.TestRunner.run(TemplateMethod.class);
	}
} // /:~
